home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 1998 June / Software of the Month Club 1998 June.iso / pc / dos / games / dom1 / rexpp.txt < prev    next >
Text File  |  1998-04-15  |  25KB  |  854 lines

  1. Rex++ Language System Programming Reference
  2.  
  3.  
  4. Introduction
  5.  
  6. Welcome to the Rex++ Programming System complete with an easy to use 
  7. integrated development environment (IDE). Rex++ is a programming language 
  8. that is similar to the high level programming language BASIC 
  9. (Beginners all-purpose Symbolic Instruction Code). You edit and run your 
  10. programs using the built-in source code editor/interpreter all from within 
  11. from the IDE.
  12.  
  13. Rex++ IDE
  14.  
  15. You start Rex++ by typing REX++ followed by the Enter key at the command prompt 
  16. inside the DOMINATION Virtual Computer Interface (of course you will need a password!)
  17. After the program loads you will see a screen that has four basic parts. The very 
  18. top line is the editor status line. This line displays the current line and column 
  19. positions of the text as you type as well as the name of the file you are editing. 
  20. Also displayed is the current edit mode. In Insert mode, text is moved over to the 
  21. right as you type and in Overstrike mode, text is written over at the current 
  22. cursor position.
  23.  
  24. The second area of the screen is the text edit window. In this area you can enter 
  25. text as you would with any editor. About 16 pages of source code and can be entered 
  26. with a line width of 50 characters per line. To end a line simply press the Enter 
  27. key. Below is a summary of the commands supported by the Rex++ Code Editor:
  28.  
  29. Cursor movement commands:
  30.  
  31. Character left                [LEFT]
  32. Character right                [RIGHT]
  33. Word left                    [Ctrl+LEFT]
  34. Word right                    [Ctrl+RIGHT]
  35. Line up                    [UP]
  36. Line down                    [DOWN]
  37. Beginning of line                Home
  38. End of line                    End
  39.  
  40. Insert and delete commands:
  41.  
  42. Delete character                Del
  43. Delete character to left        Backspace
  44. Delete line                    Ctrl+Y
  45. Insert mode on/off            Ins
  46.  
  47. The third area of the screen is the message status line. Any informative 
  48. messages displayed by the program will be shown on this line. The last area 
  49. of the screen is the command line. Below is a summary of the available commands:
  50.  
  51. command line options:
  52.  
  53. F2    Loads a source file from disk. A list of all the Rex++ programs in the 
  54.       current sub directory is displayed in a pick list. Use the arrow keys to 
  55.       highlight the file and Enter to select it.
  56.  
  57. F3    Saves the current source file to disk.
  58. F4    Runs the current source file in the editor window.
  59. F5    Clears the current source file in the editor window.
  60. F6    Exit Rex++ and returns back to the Virtual Computer Interface of DOMINATION.
  61.  
  62.  
  63. Language Guide
  64.  
  65. This section presents the formal definition of the Rex++ language.
  66.  
  67. Statements
  68.  
  69. Rex++ is made of up of a series of statements that describe the actions 
  70. the program can take. These are examples of statements:
  71.  
  72.         a := b + c;
  73.         Print("this is a test");
  74.         if (x < 2)
  75.             Answer := x * y;
  76.         endif;
  77.  
  78. Simple statements can either assign a value or transfer the running of the 
  79. program to another statement in the code. The first two examples shown in 
  80. the examples are simple statements. Structured statements can be compound 
  81. statements that contain multiple statements, conditional and repetitive 
  82. statements that control the flow of logic within a program.
  83.  
  84. Expressions
  85.  
  86. Just as a sentence is made up of phrases, so is a Rex++ statement made up of 
  87. expressions. The phrases of a sentence are made up of words, and the 
  88. expressions of a statement are composed of elements called factors and 
  89. operators. Expressions usually compare things or perform arithmetic, logical 
  90. or boolean operations. Lets look at some examples of expressions:
  91.  
  92. x + y            A simple sum.
  93.  
  94. Done <> Error    A NOT-EQUAL comparison.
  95.  
  96. i <= Width        A LESS THAN OR EQUAL comparison.
  97.  
  98. -n            The opposite of the variable n.
  99.  
  100.  
  101. Tokens
  102.  
  103. Tokens are the smallest meaningful elements in a Rex++ program. They makeup 
  104. the factors and operators of expressions. Tokens are special symbols, 
  105. reserved words, identifiers, labels, numbers and string constants; they are 
  106. akin to the words and punctuation of a written human language. These are 
  107. examples of Rex++ tokens:
  108.  
  109.     (            Left Paren, usually used for grouping.
  110.  
  111.     :=            Assignment operator.
  112.  
  113.     print            A language keyword.
  114.  
  115.     ;            The end of line character.
  116.  
  117. Operators
  118.  
  119. Operators are classified as arithmetic operators, logical operators, string 
  120. operators and relational operators. Table 1.0 below illustrates the types of 
  121. operands and results for binary and unary arithmetic operations.
  122.  
  123. Table 1.0 - Operators
  124.  
  125. Arithmetic operators:
  126.  
  127. Operator                    Operation                Operand types                    Result type
  128.  
  129.     +                    addition                number type                        number type
  130.     -                    subtraction                number type                        number type
  131.     *                    multiplication            number type                        number type
  132.     /                    division                number type                        number type
  133.  
  134.  
  135. Unary arithmetic operations:
  136.  
  137. Operator                    Operation                Operand types                    Result type
  138.  
  139.     +                    sign identity            number type                        number type
  140.     -                    sign negation            number type                        number type
  141.                                                                             
  142.  
  143. Boolean operators:
  144.  
  145. Operator                    Operation                Operand types                    Result type
  146.  
  147.     and                    logical and                Boolean                                Boolean
  148.     or                    logical or                Boolean                                Boolean
  149.  
  150.  
  151. String operators:
  152.  
  153. Operator                    Operation                Operand types                    Result type
  154.  
  155.     +                    concatenation            string type                            string type
  156.  
  157. Rex++ allows the + operator to be used to concatenate two strings operands. 
  158. The result of the operation S + T, where S and T are of type string. If the 
  159. resulting string is longer than 255 characters, it's truncated after character 255.
  160.  
  161. Relational operators:
  162.  
  163. Operator        Operation                Operand types        Result type
  164.  
  165.     =        equal                    number, string types    Boolean
  166.     <>        not equal                number, string types    Boolean
  167.     <        less than                number, string types    Boolean
  168.     >        greater than            number, string types    Boolean
  169.     <=        less than or equal to        number, string types    Boolean
  170.     >=        greater  or equal to        number, string types    Boolean
  171.  
  172.  
  173. Variables
  174.  
  175. A variable can hold a value that can change. Every variable must have a type. A 
  176. variable's type specifies the set of values the variable can have. Rex++ support 
  177. two types of variables, numbers and strings. A number can be any integer or real 
  178. (decimal) number and a string variable can be up to 255 characters.
  179.  
  180. For example, this next program declares that variables x and y are of type number; 
  181. therefore, the only values x and y can contain are numbers. Rex++ displays error 
  182. messages if your program tries to assign any other type of value to these variables.
  183.  
  184.     var x: number;        {variables x is type number}
  185.     var y: number;        {variable y is type number}
  186.     
  187.     x := 12;
  188.     y := 10;
  189.     x := x + y;
  190.  
  191. x is assigned the value 12 originally; two statements later it is assigned the 
  192. a new value, x + y. As you can see, the value of a variable can vary. All variables 
  193. are declared with the var statement. Variables can be declared anywhere in the 
  194. program, but they must be declared first before use.
  195.  
  196. Identifiers
  197.  
  198. Identifiers denote constants, types, variables or commands. An identifier can be 
  199. up to 63 characters and must begin with a letter or an underscore character "_" 
  200. and can not contain spaces. Letters, digits, and underscore characters are allowed 
  201. after the first character. Identifiers are not case sensitive.
  202.  
  203. Numbers
  204.  
  205. Ordinary decimal notation is used for numbers that are constants of integer 
  206. and floating point types. Numbers with decimals or exponents denote floating 
  207. point-type constants, while other decimal numbers denote integer-type constants; 
  208. they must be within the range -2,147483 to 2,147483.
  209.  
  210. Character strings
  211.  
  212. A character string is a sequence of zero or more characters from the extended 
  213. ASCII character set, written on one line in the program and enclosed by double 
  214. quotes. A character string with nothing between the double quotes is a null string. 
  215. Examples of character strings include:
  216.  
  217.     "Xtreme Games"        { Xtreme Games }
  218.     "This is a test'        { This is a test }
  219.     ""                { null string }
  220.     " "                { a single space }
  221.  
  222. Comments
  223.  
  224. The following constructs are comments and are ignored by Rex++:
  225.     
  226.     { Any text not containing right brace }
  227.  
  228.  
  229.  
  230. Library reference
  231.  
  232. This section contains detailed descriptions of all the Rex++ procedures and 
  233. functions with examples.
  234.  
  235. Declaration
  236.     Cls (color: number);
  237.  
  238. Purpose
  239.     Clears the screen.
  240.  
  241. Description
  242.     Cls will clear the screen with the specified color value. The color 
  243.     can range for 0 to 255.
  244.  
  245. Example
  246.     Cls(5);
  247.  
  248. Declaration
  249.     Delay ( time: number);
  250.  
  251. Purpose
  252.     Delays program execution.
  253.  
  254. Description
  255.     Delay stops the currently running program for a specified time period 
  256.     in milliseconds. The time can range from 0 to 32768.
  257.  
  258. Example
  259.     var index: number;
  260.     var color: number;
  261.  
  262.     randomize;
  263.  
  264.     loop(index=1 to 10)
  265.         number := rand(1, 256);
  266.         println("number =", number);
  267.         Delay(10); {delay program for ten milliseconds}
  268.     endl;
  269.     
  270.  
  271. Declaration
  272.     End;
  273.  
  274. Purpose
  275.     Ends the currently executing program.
  276.  
  277. Example
  278.     var n: number;
  279.  
  280.     n := 10;
  281.     if (n = 10)
  282.         println("n is 10");
  283.         end; {stop program}
  284.     endl;
  285.     println("Nope, n is not 10");
  286.  
  287.  
  288.  
  289. Description
  290.     End will stop program execution on the line containing End. The 
  291.     command can be used to abort the program based on some condition.
  292.  
  293. Declaration
  294.     Endif;
  295.  
  296. Purpose
  297.     End the code black started with a If command
  298.  
  299. Description
  300.     When a If command begins execution, all commands between If and Endif 
  301.     will be executed over and over until the If expression becomes true. 
  302.     Endif tells Rex++ where this block of code ends. There must be a Endif 
  303.     for every If and an error will be displayed if they are unbalanced.
  304.  
  305. Example
  306.     var n: number;
  307.  
  308.     n := 20;
  309.  
  310.     if (n=20)
  311.         println("n is equal to 20");
  312.     endif; {ends the if block}
  313.  
  314. Declaration
  315.     Endl;
  316.  
  317. Purpose
  318.     End the code block started with a Loop command.
  319.  
  320. Description
  321.     When a loop command begins execution, all commands between Loop and 
  322.     Endl will be executed over and over until the loop expression becomes true. 
  323.     Endl tells Rex++ where this block of code ends. There must be a Endl for 
  324.     every Loop and an error will be displayed if they are unbalanced.
  325.  
  326. Example
  327.     var n: number;
  328.  
  329.     loop(n = 1 to 10)
  330.         println(n);
  331.     endl; {ends the loop statement}
  332.  
  333. Declaration
  334.     Goto $lable
  335.  
  336. Purpose
  337.     Goto will transfer execution of the program to a specific location.
  338.  
  339. Description
  340.     Goto is a control statement that transfers execution of the program to 
  341.     the instruction following a label.  All labels in Rex++ must begin with 
  342.     a $ (dollar) symbol.
  343.  
  344. Example
  345.     var x: number;
  346.  
  347.     x := 1;
  348.  
  349.     if (x = 1)
  350.         println("x is one.");
  351.         if (x < 2)
  352.             goto $less;
  353.     endif;
  354. endif;
  355.  
  356. $less
  357. println("x was less than 2");
  358.  
  359. Declaration
  360.     If (expression: Boolean)
  361.  
  362. Purpose
  363.     Selects execution of program based on a condition.
  364.  
  365. Description
  366.     The If command is used to conditionally execute component statements 
  367.     in the program. The If expression must evaluate to True, the commands 
  368.     following the If will execute until Endif is encountered. If the expression 
  369.     produces False, execution starts on the line following the paired Endif. 
  370.     Note: If/Endif must be balanced or a run-error will be displayed.
  371.  
  372. Example
  373.     var n: number;
  374.  
  375.     randomize;
  376. n := rand(1, 10);
  377. if (n < 5)
  378.     println("n is less than 5);
  379. endif;
  380.  
  381. Declaration
  382.     Kbhit: boolean;
  383.  
  384. Purpose
  385.     Checks if a key is pressed.
  386.  
  387. Description
  388.     Kbhit checks to see of a key has been pressed. Kbhit returns a boolean 
  389.     expression of TRUE if a key has been hit and FALSE if not.
  390.  
  391. Example
  392.     if (kbhit)
  393.         println("a key was hit...");
  394.     endif;
  395.  
  396.  
  397. Declaration
  398.     Kbcode(code: number): boolean;
  399.  
  400. Purpose
  401.     Checks if a specific key is pressed.
  402.  
  403. Description
  404.     Kbcode allows you to check if a specific key is pressed. It has the advantage 
  405.     of allowing you to detect multiple keystrokes. Pass to Kbcode, the scan code 
  406.     of the key you are detecting and it will return TRUE if the key is being 
  407.     pressed or FALSE if not.
  408.  
  409. Example
  410.     if (kbcode(1))
  411.         println("the ESC key was pressed.");
  412.     endif;
  413.  
  414.     if (kbcode(72))
  415.         println("the UP arrow was pressed.");
  416.  
  417.  
  418. Declaration
  419.     Line(x1:number, y1: number, x2:number, y2: number);
  420.  
  421. Purpose
  422.     The Line command plots a line using the current graphics color that was set 
  423.     with SetColor.
  424.  
  425. Description
  426.     Line can display a line on the screen from coordinates x1,y1 to x2,y2. 
  427.     The x coordinates can range from 0-319 and the y coordinates can range 
  428.     from 0-199. An error is returned if the coordinates are outside these values.
  429.  
  430. Example
  431. var x1: number;
  432. var y1: number;
  433. var x2: number;
  434. var y2: number;
  435. var n: number;
  436.  
  437. randomize;
  438.  
  439. for (n= 1 to 1000)
  440.     x1 := rand(0, 319);
  441.     y1 := rand(0, 199);
  442.     x2 := rand(0, 319);
  443.     y2 := rand(0,199);
  444.     setcolor(rand(1,  255));
  445.     line(x1, y1, x2, y2);
  446. endl;
  447.  
  448. Declaration
  449.     Loop(control variable:number  = initial value TO final value: number)
  450.  
  451. Purpose
  452.     Loop specifies certain commands to be executed repeatedly.
  453.  
  454. Description
  455.     The Loop statement causes commands to be repeatedly executed while a 
  456.     progression of values is assigned to a control variable. The control 
  457.     variable must be a number type and already defined. The value of the 
  458.     control variable is incremented by one for each repetition. If initial 
  459.     value is greater or less than final value, the contained commands isn't 
  460.     executed. Commands will executed down to the Endl command. There must be 
  461.     a matching Endl for every loop or and error will be returned.
  462.  
  463. Example
  464.     var n: number;
  465.  
  466.     loop(n = 1 to 10)
  467.         println(n);
  468.     endl;
  469.  
  470. Declaration
  471.     Plot(x:number, y: number)
  472.  
  473. Purpose
  474.     Plots a single pixel on the screen using the current color.
  475.  
  476. Description
  477.     Plot will draw a pixel on the screen at the specified coordinate 
  478.     using the color set by the last SetColor command. The x value can range 
  479.     from 0-319 and the y value can range from 0-199. Any values outside these 
  480.     ranges results in a run-time error.
  481.  
  482. Example
  483.     plot(50, 50);
  484.     plot(160, 100);
  485.  
  486. Declaration
  487.     Print(expression:number|string|string constant)
  488.  
  489. Purpose
  490.     Outputs data to the screen with no line feed.
  491.  
  492. Description
  493.     Print can display a number, string and string constant (text between double quotes). 
  494.     Print does not move the cursor to the next line. Print will use the color set by 
  495.     the last call to SetColor and will be printed at the current cursor position.
  496.  
  497. Example
  498.     var n: number;
  499.     var s: string;
  500.  
  501.     n := 100;
  502.     s := "Jarrod Davis"
  503.     print("This is a test");
  504.     print(n);
  505.     print(s);
  506.     print(n => 100); {will display TRUE}
  507.     print(n = 1); {will display FALSE}
  508.  
  509.  
  510. Declaration
  511.     PrintLn;
  512.  
  513. Purpose
  514.     Outputs data to screen with line feed.
  515.  
  516. Declaration
  517.     Same as Print but performs a line feed and move the cursor to the beginning 
  518.     of the next line.
  519.  
  520. Declaration
  521.     Rand(min: number, max: number)
  522.  
  523. Example
  524.     See Print example.
  525.  
  526. Purpose
  527.     Returns a random number between min and max.
  528.  
  529. Description
  530.     Rand can be used to get a random number between minimum range of (0) and maximum 
  531.     range of (32767). Any values outside these ranges results in a run-time error.
  532.  
  533. Example
  534.     var n: number;
  535.     randomize;
  536.  
  537.     n := rand(0, 10);
  538.     println(n);
  539.  
  540. Declaration
  541.     Randomize;
  542.  
  543. Purpose
  544.     Seeds the random generator.
  545.  
  546. Description
  547.     Randomize initializes the random generator. This statement must be called be using Rand.
  548.  
  549. Declaration
  550. SetColor(color: number);
  551.  
  552. Purpose
  553.     Set a new color value.
  554.  
  555. Description
  556.     SetColor specifies a new color value that is used by all of the graphic routines that draws to the screen. The color value can range between 0 and 255. Any values outside this range will result in a run-time error.
  557.  
  558. Example
  559.     SetColor(50);
  560.  
  561. Declaration
  562. SetCursor(x: number, y: number);
  563.  
  564. Purpose
  565.     Sets the current cursor position.
  566.  
  567. Description
  568.     SetCursor sets the new graphics cursor position. The x coordinate can range from 0 to 319 and the y coordinate can range from 0 to 199. Any values outside the ranges will result in a run-time error.
  569.  
  570. Example
  571.     SetCursor(50, 50);
  572.  
  573. Declaration
  574.     To
  575.  
  576. Purpose
  577.     Used only in the Loop command when specifying the initial and final values.
  578.  
  579. Description
  580.     To must be used to separate the initial and final values in the Loop command. 
  581.     A run-time error is returned is it is not found.
  582.  
  583.  
  584. Example
  585.     var x: number;
  586.  
  587.     loop(x = 1 TO 100);
  588.         ...
  589.     endl;
  590.  
  591. Declaration
  592.     Var
  593.  
  594. Purpose
  595.     Declares a variable.
  596.  
  597. Description
  598.     Var is used to declare a variable. Rex++ uses two types of variables, a number 
  599.     and a string. Variables have to be declared before used or a run-timer error 
  600.     will result.
  601.  
  602. Example
  603.     var n: number;
  604.     var s: string;
  605.  
  606.     n := 1;
  607.     s := "test";
  608.  
  609.     println(n);
  610.     println(s);
  611.  
  612. Declaration
  613. WhereX;
  614.  
  615. Purpose
  616.     Returns the current X coordinate of the graphics cursor.
  617.  
  618. Description
  619.     WhereX is a function that returns the current horizontal position of the 
  620.     graphics cursor. It will return a value in the range of 0 to 319.
  621.  
  622. Example
  623.     println(wherex);
  624.  
  625. Declaration
  626.     WhereY
  627.  
  628. Purpose
  629.     Returns the current Y coordinate of the graphics cursor.
  630.  
  631. Description
  632.     WhereY is a function that returns the current vertical position of the 
  633.     graphics cursor. It will return a value in the range of 0 to 199.
  634.  
  635. Example
  636.     println(wherey);
  637.  
  638.  
  639. Examples
  640.  
  641. This section contains listings for a number of example programs that demonstrates 
  642. the various features of the Rex++ language. All of these programs will be installed 
  643. on your hard drive along with DOMINATION, so you don't have type them in. To load 
  644. any of them, simply note their name(s) and use the LOAD command from the IDE.
  645.  
  646. The first example shown below in Listing 1.0 illustrates the use of the random 
  647. number generator coupled with the clear screen function. The program begins by 
  648. declaring a loop variable followed by seeding the random number generator. The 
  649. program then enters the main loop which iteratively clears the screen with a new 
  650. random color each cycle.
  651.  
  652. Listing 1.0 - CLS.RPP
  653.  
  654. { This program demonstrates the cls command }
  655.  
  656. var x: number;                         { declare x as a number }
  657.  
  658. randomize;                            { initialize random number generator }
  659.  
  660. loop(x=1 to 50)                        { setup to loop from 1 to 50 }
  661.   cls(rand(0, 255));                    { clear the screen with a random color }
  662.   delay(50);                        { pause program execution for 50 milliseconds }
  663. endl                                { end the loop }
  664.  
  665. The next example program shown below in Listing 2.0 illustrates how to use the 
  666. cursor setting and querying functions. The program sets the position of 
  667. the cursor and then retrieves it with the "where" functions. This is a good 
  668. example of how to track your text output for formatting.
  669.  
  670. Listing 2.0 - CURSOR.RPP
  671.  
  672. { This program demonstrates the setcursor command }
  673.  
  674. var x: number;                { declare x as a number }
  675. var y: number;                { declare y as a number }
  676.  
  677. setcursor(50, 80);            { set graphics cursor to position 50,80 }
  678. println("");                { print a blank line }
  679. print("X = ",wherex);            { print value of current horizontal position }
  680. print("Y = ",wherey);            { print value of current vertical position }
  681.  
  682. All computer languages allow complex expressions to be evaluated, however, 
  683. Rex++ goes a little farther in some areas such as string processing. Listing 3.0 
  684. below shows both numeric and string data types benig defined and output. Notice the 
  685. use of the addition operator to concatenate strings together, this is a very 
  686. powerful language construct.
  687.  
  688. Listing 3.0 - EXPR.RPP
  689.  
  690. { This program demonstrates expressions and strings }
  691.  
  692. var s: string;                    { declare x as a string }
  693. var n: number;                    { declare n as a number }
  694.  
  695. n := 100 + 100;                    { assign n a number value }
  696. s := "This is a test" + " this is another test "; { assign s a string value }
  697. println(s);                            { print value of s }
  698. println(n);                            { print value of n }
  699. println("I am the " + "Man!");    { print a string expression }
  700. println( ((4*5) / 2) + (100/2)); { print a number expression }
  701.  
  702. The next example below, Listing 4.0 is our first program that does something a bit 
  703. graphical. The program begins by declaring a number of working variables, the 
  704. program then enters into a main loop and repeatedly computes a set of random 
  705. numbers. These numbers are used as parameters to the color and line drawing 
  706. functions. The result, a collection of random lines drawn on the screen in 
  707. random colors.  
  708.  
  709. Listing 4.0 - LINE.RPP
  710.  
  711. { This program demonstrates the line command}
  712.  
  713. randomize;                        { setup the random number generator }
  714.  
  715. line(0,0,319,199);                { draw a diagonal line from 0,0 to 319,199 }
  716.  
  717. var n: number;                    { declare n as a number }
  718. var x1: number;                    { declare x1 as a number }
  719. var y1: number;                    { declare y1 as a number }
  720. var x2: number;                    { declare x2 as a number }
  721. var y2: number;                    { declare y2 as a number }
  722.  
  723. loop(n=1 to 1000)                    { set n to loop from 1 to 1000 }
  724.   x1 := rand(0, 319);                { assign x1 a random number from 0 to 319 }
  725.   y1 := rand(0, 199);                { assign y1 a random number from 0 to 199 }
  726.   x2 := rand(0, 319);                { assign x2 a random number from 0 to 319 }
  727.   y2 := rand(0, 199);                { assign y2 a random number from 0 to 199 }
  728.   setcolor(rand(1, 255);            { set graphics color a random color from 1 to 255 }
  729.   line(x1, y1, x2, y2);                { draw line }
  730. endl;                            { end loop }
  731.  
  732. Listing 5.0 below is similar to Listing 4.0 except that instead drawing random line 
  733. segments, random pixels are drawn. However, don't be fooled by the example's 
  734. simplicity since there is a more important language construct to be learned here. 
  735. Notice that instead of using local variables to hold random data values, the 
  736. random pixel postions are computed as parameters to the plot function. Hence, you 
  737. may use this technique freely to save a local variable(s).
  738.  
  739. Listing 5.0 - PLOT.RPP
  740.  
  741. { This program demonstrates the plot command }
  742.  
  743. var x: number;                 {declare x as a number}
  744.  
  745. randomize;                     {seed random number generator}
  746.  
  747. loop(x=1 to 10000)            { set x to loop from 1 to 1000 }
  748.   setcolor(rand(1, 255));        { set graphics color a random number from 1 to 255 }
  749.   plot(rand(0, maxx), rand(0, maxy));    { plot pixel at random x,y position }
  750. endl;                                                            { end loop }
  751.  
  752. println("I am the man!");        { print a string expression }
  753.  
  754.  
  755. No language would be complete without the ability to create text output. Rex++ has 
  756. two functions to accomplish this task: print() and println(). Listing 6.0 below 
  757. shows an example use of both of these functions, notice that the functions can 
  758. take either numeric or string data.
  759.  
  760. Listing 6.0 - PRINT.RPP
  761.  
  762. { This program demonstrates the print/println commands}
  763.  
  764. var x:number;    { declare x as a number }
  765. var y:string;    { declare y as a string }
  766.  
  767. loop(x=1 to 10)    { setup x to loop from 1 to 10 }
  768.  println("number: ", x);    { print value of x }
  769. endl;                    { end loop }
  770.  
  771. print("this is a test");            { print string constant with no line feed}
  772. println(" this is on the same line.");    { print string constant with line feed }
  773. println("but this is not.");            { print string constant with line feed }
  774.  
  775. Listing 7.0 is a formal example of using the random functions, not too exciting!
  776.  
  777. Listing 7.0 - RAND.RPP
  778.  
  779. { This program demonstrates the randomize/rand commands}
  780.  
  781. randomize;                    { setup random number generator }
  782.  
  783. var n: number;                { declare n as a number }
  784.  
  785. loop(n=1 to 20)                { set n to loop from 1 to 20 }
  786.   println(rand(1, 1000));        { print a random number between 1 and a 1000 }
  787. endl;                        { end loop }
  788.  
  789.  
  790. Listing 8.0 below illustrates the use of the real-time keyboard I/O functions 
  791. which allow you to not only detect if a key has been pressed, but if multiple 
  792. keys have been pressed. This particular example shows how to track the arrow keys.
  793.  
  794. Listing 8.0 - KEYTEST.RPP
  795.  
  796. { This program demonstrates the kbcode function and the goto command }
  797.  
  798. println("Press the arrow keys, <ESC> to quit...");          { tell what to do }
  799.  
  800. setcolor(14);                                                                                                        { set text color to yellow }
  801.  
  802. $checkkeys                                                                                                                { define a label }
  803.  
  804.   {clear keys}
  805.   setcursor(0,6);
  806.   print("           ");
  807.   setcursor(0,12);
  808.   print("           ");
  809.   setcursor(0,18);
  810.   print("           ");
  811.   setcursor(0,24);
  812.   print("           ");
  813.  
  814.   {check up arrow}
  815.   if (kbcode(72))
  816.     setcursor(0, 6);
  817.     print("up arrow");
  818.   endif;
  819.  
  820.   {check down arrow}
  821.   if (kbcode(80))
  822.    setcursor(0, 12);
  823.    print("down arrow");
  824.   endif; 
  825.  
  826.   {check left arrow}
  827.   if (kbcode(75))
  828.     setcursor(0,18);
  829.     print("left arrow");
  830.   endif;
  831.  
  832.   {check right arrow}
  833.   if (kbcode(77))
  834.     setcursor(0,24);
  835.     print("right arrow");
  836.   endif;
  837.  
  838.  
  839.   {check for <ESC>}
  840.   if (kbcode(1))
  841.     goto $out
  842.   endif;
  843.  
  844. goto $checkkeys
  845.  
  846. $out
  847. println("");
  848. println("out of here");
  849.  
  850.  
  851. That's it baby!
  852.  
  853.  
  854.